home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / hity wydania / Ubuntu 9.10 PL / karmelkowy-koliberek-desktop-9.10-i386-PL.iso / casper / filesystem.squashfs / sbin / dmraid-activate < prev    next >
Text File  |  2009-10-06  |  3KB  |  137 lines

  1. #!/bin/sh
  2. #
  3. # dmraid-activate: Script to reformat the output of dmraid to be useful with
  4. # udev.
  5. #
  6. # (c) 2008 Canonical Ltd.
  7. #
  8. # This program is free software; you can redistribute it and/or modify
  9. # it under the terms of the GNU General Public License as published by
  10. # the Free Software Foundation; either version 2 of the License, or
  11. # (at your option) any later version.
  12. #
  13. # This program is distributed in the hope that it will be useful,
  14. # but WITHOUT ANY WARRANTY; without even the implied warranty of
  15. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  16. # GNU General Public License for more details.
  17. #
  18. # You should have received a copy of the GNU General Public License along
  19. # with this program; if not, write to the Free Software Foundation, Inc.,
  20. # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
  21.  
  22. # Arguments: $1 = Name of array you want activated.
  23. activate_array ()
  24. {
  25.     Raid_Setinfo=$(dmraid -i -si "$1")
  26.     if [ -z "$Raid_Setinfo" ]; then
  27.         log_error "Cannot retrieve RAID set information for $1"
  28.         return 1
  29.     fi
  30.  
  31.     Raid_Type=$(dmraid -i -si -ct "$1")
  32.     Raid_Nodevs=$(dmraid -i -si -cd "$1")
  33.  
  34.     case "$Raid_Type" in
  35.         stripe)
  36.             if [ "$Raid_Nodevs" -lt 2 ]; then
  37.                 if [ -n "$Degraded" ]; then
  38.                     log_error "Cannot bring up a RAID0 array in degraded mode, not all devices present."
  39.                 fi
  40.                 return 2
  41.             fi
  42.             ;;
  43.         mirror)
  44.             if [ "$Raid_Nodevs" -lt 2 ]; then
  45.                 if [ -z "$Degraded" ]; then
  46.                     log_error "Raid set $Raid_Name is degraded. Not activating"
  47.                     return 2
  48.                 else
  49.                     log_warning "Activating $Raid_Name in degraded mode"
  50.                     Return_Val=3
  51.                 fi
  52.             fi
  53.             ;;
  54.         raid5_*)
  55.             modprobe -q dm_raid45
  56.             if [ "$Raid_Nodevs" -lt 3 ]; then
  57.                 if [ -z "$Degraded" ]; then
  58.                     log_error "Raid set $Raid_Name is degraded. Not activating"
  59.                     return 2
  60.                 else
  61.                     log_warning "Activating $Raid_Name in degraded mode"
  62.                     Return_Val=3
  63.                 fi
  64.             fi
  65.             ;;
  66.     esac
  67.  
  68.     # At this point we have the required number of devs, or the user wants the
  69.     # array brought up in degraded mode, except in the case of striped arrays.
  70.     dmraid -i -ay -Z "$1"
  71.     return $Return_Val
  72. }
  73.  
  74. log_warning()
  75. {
  76.     if type logger > /dev/null ; then
  77.         logger -t dmraid-activate "WARNING: $1"
  78.     else
  79.         echo "dmraid-activate: WARNING: $1"
  80.     fi
  81. }
  82.  
  83. log_error()
  84. {
  85.     if type logger > /dev/null ; then
  86.         logger -t dmraid-activate "ERROR: $1"
  87.     else
  88.         echo "dmraid-activate: ERROR: $1"
  89.     fi
  90. }
  91.  
  92. if grep -qs "\<nodmraid\>" /proc/cmdline; then
  93.     log_warning "dmraid disabled by boot option"
  94.     exit 0
  95. fi
  96.  
  97. modprobe -q dm_mod
  98.  
  99. if [ -z "$1" ] || [ "$1" = "--degraded" ] && [ "$#" -lt 2 ]; then
  100.     echo "Node name not specified." >&2
  101.     exit 1
  102. fi
  103.  
  104. if [ "$1" = "--degraded" ]; then
  105.     Degraded=1
  106.     Node_Name=$2
  107. else
  108.     Node_Name=$1
  109. fi
  110.  
  111. Raid_Name=$(dmraid -i -r -cr /dev/$Node_Name | grep -vi "No RAID disks" | grep -vi "formats discovered")
  112.  
  113. if [ -z "$Raid_Name" ]; then
  114.     exit 0
  115. fi
  116.  
  117. # We need a special case for isw arrays, since it is possible to have several
  118. # subsets of a RAID group, of varying RAID types.
  119. case "$Raid_Name" in
  120.     isw_*)
  121.         Isw_Group_Name=$Raid_Name
  122.         Isw_Subsets=$(dmraid -i -n "/dev/$Node_Name" | grep volume | sed 's/.*volume: " *\(.*\)"$/\1/')
  123.  
  124.         for isw_subset in $Isw_Subsets
  125.         do
  126.             activate_array "${Isw_Group_Name}_${isw_subset}"
  127.         done
  128.         break
  129.         ;;
  130.     *)
  131.         activate_array "$Raid_Name"
  132.         break
  133.         ;;
  134. esac
  135.  
  136. exit $Return_Val
  137.